package api

import (
	"github.com/gin-gonic/gin"
	"hub.hddznet.com/app/framework/action"
)

type ApiMenuView struct {
	ID          string        `json:"_id" bson:"_id"`
	Name        string        `json:"name,omitempty" bson:"name"`               //功能名称
	Icon        string        `json:"icon,omitempty" bson:"icon"`               //功能图标
	Type        string        `json:"type,omitempty" bson:"type"`               //功能类型
	Value       string        `json:"value,omitempty" bson:"value"`             //功能地址
	Orientation string        `json:"orientation,omitempty" bson:"orientation"` //屏幕方向
	Order       int           `json:"order,omitempty" bson:"order"`             //排序
	Remark      string        `json:"remark,omitempty" bson:"remark"`           //备注
	Level       int           `json:"level,omitempty" bson:"level"`             //菜单等级
	Children    []ApiMenuView `json:"children,omitempty" bson:"children"`       //子目录
}

// 封装 app 用户登录接口，统一APP的登录接口的输入输出
// @param type 		功能类型	*可选
// @param parent 	父菜单ID	*可选
// @param ids 		菜单ID		*可选(当此项中有值的时候，所有返回内容将没有父子关系)
// function 中返回的interface{} 必须为一个数组
func (this *appmenu) Menu(c *gin.Context, fn func(typ, parent string, ids []string) ([]ApiMenuView, error)) {
	pa := struct {
		Type   string   `json:"type"`
		Parent string   `json:"parent"`
		Ids    []string `json:"ids"`
	}{}
	action.Do(c, &pa, 1, func() (interface{}, error) {
		data, err := fn(pa.Type, pa.Parent, pa.Ids)
		if err != nil {
			return nil, err
		}
		return data, nil
	})
}

type appmenu struct{}

var AppMenu *appmenu

func init() {
	AppMenu = new(appmenu)
}
